//Interrupt handler (Codename "Haber-Bosch")
#include "interrupt_handler.h"
#include "asmcode.h"
#include "serial.h"
#include "system_timer.h"
#define STACKLENGTH 1000

unsigned char irqstack[STACKLENGTH];

void enableAICInterrupts(){
    write("0x18 setzen\n");
    *InterruptVectorAddress = OPCODE;  //Sprungadresse im arm an 0x18 setzen
    printf("IRQ-Stack (%x) setzen\n",((int)irqstack )+STACKLENGTH*4);
    int i = initIRQStack(((int)irqstack )+STACKLENGTH*4);
    printf("Inhalt von verändertem CPSR: %x\n",i);
    write("Handlerfunktionsadresse setzen\n");
    *AIC_SVR1 = (int)&timeHandler;
    printf("timeHandler-Adresse: %x, Inhalt von AIC_SVR1: %x, Inhalt von 0x18: %x\n, handler-Adresse: %x, irqstack-Adresse: %x\n", (int)&timeHandler,*AIC_SVR1,*InterruptVectorAddress,(int)&handler, (int)irqstack);
    write("aktivieren des Interrupts vom AIC\n");
    *AIC_IECR = SYS;		//enabelt Interrupts im AIC
    write("CPSR Interrupts enablen\n");
    enableCPSR();		//Enabledt Interupts im CPSR
}

void remap(){
    *MC_RCR = RCB;
}


void handler(){
	write("!\n");
	*AIC_EOICR = 1; //AIC_EOICR schreiben, um anzuzeigen, dass Interrupt beendet wurde. Geschriebener Inhalt ist egal
	*ST_SR; //ST_SR lesen um anzuzeigen, dass Interrupt bearbeitet wurde (oder so ähnlich, vll wars auch was anderes!)
}





